机器人消息
现阶段,getUpdates暂时不对公众开放,拿消息需要走websocket,有需求的可以联系官方
机器人收到的每一条消息存放在一个通用的 Update 对象中,你可以使用 getUpdates 方法获取 Update,返回的结果是 JSON 序列化的 Update 对象。
/getUpdate是一个http协议的长轮询调用。在长轮询机制中,web客户端像传统轮询一样从服务器请求消息,然而,如果服务器没有可以立即返回给客户端的消息,则不会立刻返回一个空结果, 而是保持这个请求等待消息,之后将数据作为结果返回给客户端,如果超过一定时间后,依然没有消息可返回给web客户端,则超时返回,返回的消息为空。可以用下图来表示这种机制:
/v2/getUpdates则采用了不是上文所述长轮询的形式调用
#
Update对象机器人收到的消息都是以Update对象表示的。
Field | Type | Description |
---|---|---|
update_id | Integer | 唯一id |
message | Message | Optional. Message对象 |
edited_message | Message | Optional. 已经被编辑的Message对象 |
channel_post | Message | Optional. 频道里的Message对象. |
edited_channel_post | Message | Optional. 频道的Message对象,该Message是被编辑过的 |
inline_query | InlineQuery | Optional. 内联查询 |
chosen_inline_result | ChosenInlineResult | Optional. 预留 |
callback_query | CallbackQuery | Optional. CallbackQuery对象 |
shipping_query | ShippingQuery | Optional. 预留 |
pre_checkout_query | PreCheckoutQuery | Optional. PreCheckoutQuery对象, |
poll | Poll | Optional. bot发放的投票,其它机器人也会收到 |
poll_answer | PollAnswer | Optional. 用户投票时选择的答案 |
#
getUpdates使用这个接口接收服务器里所有的Update,这是一个长轮询的设计方案,返回一组Update对象,默认情况下只能收到公开频道的NewJoin消息和艾特机器人的消息,如果想接收所有类型的消息,必须调用SetBotPrivacyMode接口去打开Privacy模式,此时才能接收所有类型的消息,比如圈子,表态,pin,图片,视频等等消息。
Parameter | Type | Required | Description |
---|---|---|---|
offset | Integer | Optional | 所有的Update保存在一个队列里,offset表示从队列尾部取多少条目的Update对象,调用后,在该offset之前的Update对象都会被删除掉。该队列的最大长度是10000,超过100000条时,较旧的Update对象会被删除 |
limit | Integer | Optional | 表示调用getUpdate返回的Update最大条目数,取值范围1~100,默认取值100(当取值0时会设为10) |
timeout | Integer | Optional | 长轮询调用时,等待的时长,以秒为单位,默认是60 |
ignore | Unsigned Integer 64 | Optional | 默认为 0, 用于忽略不想接收的消息类型,详见如下说明 |
allowed_updates | Array of String | Optional | 预留,指定接收Update的topic,比如文本消息,圈子消息,user的join和Leave等等 |
#
ignore 参数详解ignore, unsigned int64,
- 默认为 0
- 1(0b01) -> 不接收 user offline 消息
- 2(0b10) -> 不接收 user online 消息
- 3(0b11) -> 不接收 user offline, user online 消息
- 其余值 -> 保留
图表表示:
bit | description |
---|---|
1 | ignore user offline messages |
2 | ignore user online messages |
3 ~ 64 | reserve |
#
发文件时,bot get_update 的返回类型key | type | description |
---|---|---|
type | string | 固定为 "file" |
file_name | string | 文件名 |
file_url | string | |
file_type | number | 类型 |
file_ext | string | 扩展名 |
file_size | number | 大小 |
created | number | 创建时间 |
file_id | string | id (可选) |
file_hash | string | hash (可选) |
file_desc | string | 描述 (可选) |
client | string | (可选) |
{ "ok": true, "result": [ { "update_id": 360723665823727000, "message": { "message_id": 360723665823727000, "date": 1651226111000, "chat": { "id": 358234219052269000, "guild_id": 0, "type": "private", "username": "1" }, "from": { "id": 1, "is_bot": false, "first_name": "first_name", "username": "1", "gender": 1 }, "reply_to_message": null, "file": { "fanbook_file_v1": { "type": "file", "file_name": "file.pdf", "file_url": "https://fanbook-video-test-1251001060.file.myqcloud.com/fanbook/app/files/chatroom/pdf/real-file.pdf", "file_type": 4, "file_ext": "pdf", "file_size": 3145202, "created": 1651226111263, "file_id": "1651226111262", "file_hash": "e1e39df3d6061cb940713451b2f4bd23", "file_desc": "", "client": 1 } } } } ]}
#
发红包时,bot get_update 的返回类型key | value |
---|---|
type | 固定为 "sendRedBag1" |
red_pack_type | 1:群手气,2:群普通,3:私信 |
red_pack_greetings | 红包祝福语 |
money | 两位小数 |
num | 整数 |
money | 两位小数 |
picture | 红包封面图片的url |
{ "ok": true, "result": [ { "update_id": 1, "channel_post": { "message_id": 1, "date": 1649952059000, "chat": { "id": 1, "guild_id": 1, "type": "channel" }, "from": { "id": 1, "is_bot": false, "first_name": "first_name", "username": "1", "gender": 1 }, "reply_to_message": null, "fanbook_red_envelope_start_sending": { "type": "sendRedBag1", "red_pack_type": 1, "red_pack_greetings": "红包 title", "money": 1.0, "num": 2, "picture": "" } } } ]}
#
消息卡片操作(messageCardOperate),bot get_update 的返回类型{ "ok": true, "result": [ { "update_id": 1, "channel_post": { "message_id": 1, "date": 1649952059000, "chat": { "id": 1, "guild_id": 1, "type": "channel" }, "from": { "id": 1, "is_bot": false, "first_name": "first_name", "username": "1", "gender": 1 }, "reply_to_message": null, "interaction_message_card_operation": { "type": "messageCardOperate", "action": "del", "id": "355379868369682432", "key": "the-key-of-message-card", "count": 2 } } } ]}
#
消息卡片(messageCard, interaction_message_card 的字段除了 type, data, 其余均为可选),bot get_update 的返回类型{ "ok": true, "result": [ { "update_id": 1, "channel_post": { "message_id": 1, "date": 1649952059000, "chat": { "id": 1, "guild_id": 1, "type": "channel" }, "from": { "id": 1, "is_bot": false, "first_name": "first_name", "username": "1", "gender": 1 }, "reply_to_message": null, "interaction_message_card": { "type": "messageCard", "width": 800, "height": 600, "data": "messageCard-data", "notification": "messageCard-notification", "edition": "edition" } } } ]}